package com.yituo.mjworld.mvc.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.yituo.mjworld.core.web.core.BaseForm;
import com.yituo.mjworld.core.web.core.Result;
import com.yituo.mjworld.mvc.entity.web.WebBanner;
import com.yituo.mjworld.mvc.form.DeleteForm;
import com.yituo.mjworld.mvc.form.QueryForm;
import com.yituo.mjworld.mvc.service.BaseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.lang.reflect.InvocationTargetException;

/**
 * 轮播图接口
 */
@Service
public class BannerServiceImpl extends BaseService {
  @Autowired
  QiniuServiceImpl qiniuService;

  /**
   * 获取轮播图列表
   *
   * @param form 查询语句
   * @return
   */
  @Override
  public JSONObject getList(QueryForm form) {
    String countSql = "select count(id) from web_banner ";
    String sql = "select id,orderNum,imgUrl,productId from web_banner order by ordernum";
    return get(sql, countSql, form, null);
  }

  /**
   * 删除一张轮播图
   *
   * @param form 删除表单
   * @return
   */
  @Override
  public Result delete(DeleteForm form) {
    Result result = new Result();
    WebBanner banner = (WebBanner) baseDao.get(WebBanner.class, form.getId());
    if (banner == null) {
      return result.setResult(false).setMsg("当前轮播图对象不存在!");
    } else {
      if (!banner.getIsUseProductImg()) {
        // 不是使用的产品或者分类的图,
        // 而是自定义上传的活动图.
        // 比如: 针对某个商品除了一系列搞了一次促销活动,做了一张很有吸引力的图,
        // 希望放到首页上引导用户去浏览某一个系列，或者某一个产品的.
        // 那么当活动结束，需要删除某部分的轮播图的时候.就需要调用七牛去删除对应的这张很有吸引力但是已经过了时效的图片
        // 删除七牛上的对象
        qiniuService.delete(qiniuService.getFileNameForUrl(banner.getImgUrl()));
      }
      baseDao.delete(banner);
      return result.setResult(true);
    }
  }

  /**
   * 保存或者更新一张轮播图
   *
   * @param baseForm 更新表单
   * @return
   * @throws InvocationTargetException
   * @throws IllegalAccessException
   */
  @Override
  public Result saveOrUpdate(BaseForm baseForm) throws InvocationTargetException, IllegalAccessException {
    WebBanner banner = (WebBanner) baseForm;
    WebBanner banner2 = (WebBanner) baseDao.get(WebBanner.class,banner.getId());
    if (banner2 == null) {
      // 新增操作
      baseDao.saveOrUpdate(banner);
    } else {
      //更新操作
      baseDao.merge(banner);
    }
    return new Result().setResult(true);
  }

  /**
   * 更新URL
   *
   * @param id
   * @param url
   * @return
   */
  public Result updateUrl(int id, String url) {
    WebBanner item = (WebBanner) baseDao.get(WebBanner.class, id);
    if (item == null) {
      return new Result().setResult(false).setMsg("更新的项目不存在!");
    } else {
      if (url.equals(item.getImgUrl())) {
        // 两次更新的内容相等.
        return new Result().setResult(true);
      }
      if (!StringUtils.isEmpty(item.getImgUrl())) {
        // 之前的图片不为空
        qiniuService.delete(qiniuService.getFileNameForUrl(item.getImgUrl()));
      }
      item.setImgUrl(url);
      baseDao.saveOrUpdate(item);
    }
    return new Result().setResult(true);
  }
}
